// 封装一个倒计时的逻辑函数

/*
    实现步骤:
        1. 先不管具体的逻辑, 先实现函数结构
        2. 分析核心思路, 然后定位到解决问题的管家你步骤
        3. 根据关键步骤, 诸葛解决问题

        核心思路:
            每隔1s, time 减一
            解决: 定时器(time--) -> vueuse提供一个函数

        格式化时间: dayjs
 */

import { ref, computed } from 'vue'
import { useIntervalFn } from '@vueuse/core'
import dayjs from 'dayjs'

function useCountDown () {
  // 倒计时数据
  const time = ref(0)
  const formatTime = computed(() => {
    return dayjs.unix(time.value).format('mm分ss秒')
  })

  // 执行函数
  const { pause, resume } = useIntervalFn(() => {
    /* your function */
    // pause: 用来暂停重复执行的逻辑(函数)
    // resume: 用来开始执行重复的逻辑(函数)
    // 回调函数: 如果想每隔1s钟做一个事情, 就把自己的逻辑代码放到 your function 的位置
    // 最多到0就停止
    // 如果我们用的是return的写法 只能控制我们不执行--逻辑 回调还会不断执行
    // 如果我们用的是pause方法 彻底停止我们的定时器 整个回调函数都不会重复执行
    if (time.value === 1) {
      pause()
    }
    time.value--
  }, 1000)
  // 开始倒计时
  function start (count) {
    // 先初始化
    time.value = count
    // 再开始倒计时
    resume()
  }

  // 暂停倒计时
  function stop () {
    pause()
  }
  return {
    time,
    formatTime,
    start,
    stop
  }
}

export default useCountDown
